Autores:
Patricio Porras, Diego Altamirano
ExtracciĂ³n de Patrones con los datos de California Housing Prices¶
Objetivo y alcance del trabajo:¶
Esta prueba prĂ¡ctica se centra en el anĂ¡lisis exploratorio de datos y la visualizaciĂ³n de un conjunto de datos de viviendas. El conjunto de datos contiene informaciĂ³n sobre las caracterĂsticas de las viviendas, como la ubicaciĂ³n geogrĂ¡fica, el tamaño, el nĂºmero de habitaciones, el precio medio y la proximidad al ocĂ©ano.
El objetivo principal de este notebook es entender las relaciones entre las diferentes caracterĂsticas de las viviendas. Para ello, realizaremos una serie de tareas, incluyendo la limpieza de los datos, la transformaciĂ³n de variables categĂ³ricas en numĂ©ricas, el cĂ¡lculo de correlaciones entre las variables y la visualizaciĂ³n de estas correlaciones.
Al final de este notebook, tendremos una mejor comprensiĂ³n de cĂ³mo las diferentes caracterĂsticas de las viviendas estĂ¡n relacionadas entre sĂ, lo que nos permitirĂ¡ realizar anĂ¡lisis mĂ¡s detallados en el futuro.
El dataset 'california_housing_prices.csv' contiene informaciĂ³n sobre los precios de viviendas en California. Las variables presentes en el dataset son las siguientes:
- longitude: La longitud geogrĂ¡fica de la ubicaciĂ³n de la vivienda.
- latitude: La latitud geogrĂ¡fica de la ubicaciĂ³n de la vivienda.
- housing_median_age: La edad mediana de las viviendas en la ubicaciĂ³n.
- total_rooms: El nĂºmero total de habitaciones en la vivienda.
- total_bedrooms: El nĂºmero total de dormitorios en la vivienda.
- population: La poblaciĂ³n total en la ubicaciĂ³n.
- households: El nĂºmero total de hogares en la ubicaciĂ³n.
- median_income: El ingreso mediano de los hogares en la ubicaciĂ³n.
- median_house_value: El valor mediano de las viviendas en la ubicaciĂ³n.
- ocean_proximity: La proximidad de la vivienda al océano.
El dataset contiene un total de 20,640 registros. Las variables tienen diferentes tipos de datos, siendo la mayorĂa variables numĂ©ricas (float64) y una variable categĂ³rica (object). Algunas variables tienen valores faltantes en el dataset.
Fase I: Carga y anĂ¡lisis exploratorio inicial de los datos¶
# Importamos las librerĂas 'pandas' con alias 'pd', 'seaborn' con alias 'sns', y 'matplotlib.pyplot' con alias 'plt'
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Cargamos el conjunto de datos 'california_housing_prices.csv' en un DataFrame llamado 'housing'
housing = pd.read_csv('california_housing_prices.csv')
# Utilizamos el método 'head()' para visualizar las primeras 15 filas del DataFrame 'housing'
housing.head(15)
| longitude | latitude | housing_median_age | total_rooms | total_bedrooms | population | households | median_income | median_house_value | ocean_proximity | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | -122.23 | 37.88 | 41.0 | 880.0 | 129.0 | 322.0 | 126.0 | 8.3252 | 452600.0 | NEAR BAY |
| 1 | -122.22 | 37.86 | 21.0 | 7099.0 | 1106.0 | 2401.0 | 1138.0 | 8.3014 | 358500.0 | NEAR BAY |
| 2 | -122.24 | 37.85 | 52.0 | 1467.0 | 190.0 | 496.0 | 177.0 | 7.2574 | 352100.0 | NEAR BAY |
| 3 | -122.25 | 37.85 | 52.0 | 1274.0 | 235.0 | 558.0 | 219.0 | 5.6431 | 341300.0 | NEAR BAY |
| 4 | -122.25 | 37.85 | 52.0 | 1627.0 | 280.0 | 565.0 | 259.0 | 3.8462 | 342200.0 | NEAR BAY |
| 5 | -122.25 | 37.85 | 52.0 | 919.0 | 213.0 | 413.0 | 193.0 | 4.0368 | 269700.0 | NEAR BAY |
| 6 | -122.25 | 37.84 | 52.0 | 2535.0 | 489.0 | 1094.0 | 514.0 | 3.6591 | 299200.0 | NEAR BAY |
| 7 | -122.25 | 37.84 | 52.0 | 3104.0 | 687.0 | 1157.0 | 647.0 | 3.1200 | 241400.0 | NEAR BAY |
| 8 | -122.26 | 37.84 | 42.0 | 2555.0 | 665.0 | 1206.0 | 595.0 | 2.0804 | 226700.0 | NEAR BAY |
| 9 | -122.25 | 37.84 | 52.0 | 3549.0 | 707.0 | 1551.0 | 714.0 | 3.6912 | 261100.0 | NEAR BAY |
| 10 | -122.26 | 37.85 | 52.0 | 2202.0 | 434.0 | 910.0 | 402.0 | 3.2031 | 281500.0 | NEAR BAY |
| 11 | -122.26 | 37.85 | 52.0 | 3503.0 | 752.0 | 1504.0 | 734.0 | 3.2705 | 241800.0 | NEAR BAY |
| 12 | -122.26 | 37.85 | 52.0 | 2491.0 | 474.0 | 1098.0 | 468.0 | 3.0750 | 213500.0 | NEAR BAY |
| 13 | -122.26 | 37.84 | 52.0 | 696.0 | 191.0 | 345.0 | 174.0 | 2.6736 | 191300.0 | NEAR BAY |
| 14 | -122.26 | 37.85 | 52.0 | 2643.0 | 626.0 | 1212.0 | 620.0 | 1.9167 | 159200.0 | NEAR BAY |
# Utilizamos el mĂ©todo 'describe()' para obtener estadĂsticas descriptivas del DataFrame 'housing'
housing.describe()
| longitude | latitude | housing_median_age | total_rooms | total_bedrooms | population | households | median_income | median_house_value | |
|---|---|---|---|---|---|---|---|---|---|
| count | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20433.000000 | 20640.000000 | 20640.000000 | 20640.000000 | 20640.000000 |
| mean | -119.569704 | 35.631861 | 28.639486 | 2635.763081 | 537.870553 | 1425.476744 | 499.539680 | 3.870671 | 206855.816909 |
| std | 2.003532 | 2.135952 | 12.585558 | 2181.615252 | 421.385070 | 1132.462122 | 382.329753 | 1.899822 | 115395.615874 |
| min | -124.350000 | 32.540000 | 1.000000 | 2.000000 | 1.000000 | 3.000000 | 1.000000 | 0.499900 | 14999.000000 |
| 25% | -121.800000 | 33.930000 | 18.000000 | 1447.750000 | 296.000000 | 787.000000 | 280.000000 | 2.563400 | 119600.000000 |
| 50% | -118.490000 | 34.260000 | 29.000000 | 2127.000000 | 435.000000 | 1166.000000 | 409.000000 | 3.534800 | 179700.000000 |
| 75% | -118.010000 | 37.710000 | 37.000000 | 3148.000000 | 647.000000 | 1725.000000 | 605.000000 | 4.743250 | 264725.000000 |
| max | -114.310000 | 41.950000 | 52.000000 | 39320.000000 | 6445.000000 | 35682.000000 | 6082.000000 | 15.000100 | 500001.000000 |
# Utilizamos el mĂ©todo 'info()' para obtener informaciĂ³n sobre el DataFrame 'housing'
housing.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 20640 entries, 0 to 20639 Data columns (total 10 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 longitude 20640 non-null float64 1 latitude 20640 non-null float64 2 housing_median_age 20640 non-null float64 3 total_rooms 20640 non-null float64 4 total_bedrooms 20433 non-null float64 5 population 20640 non-null float64 6 households 20640 non-null float64 7 median_income 20640 non-null float64 8 median_house_value 20640 non-null float64 9 ocean_proximity 20640 non-null object dtypes: float64(9), object(1) memory usage: 1.6+ MB
Fase II: VisualizaciĂ³n de los datos¶
# Utilizamos el método 'hist()' de 'pandas' para visualizar un histograma de todas las columnas del DataFrame 'housing', con un tamaño de figura de 20x15
housing.hist(figsize=(20, 15))
array([[<Axes: title={'center': 'longitude'}>,
<Axes: title={'center': 'latitude'}>,
<Axes: title={'center': 'housing_median_age'}>],
[<Axes: title={'center': 'total_rooms'}>,
<Axes: title={'center': 'total_bedrooms'}>,
<Axes: title={'center': 'population'}>],
[<Axes: title={'center': 'households'}>,
<Axes: title={'center': 'median_income'}>,
<Axes: title={'center': 'median_house_value'}>]], dtype=object)
# Usamos la librerĂa 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California (DataFrame 'housing')
sns.scatterplot(x='longitude', y='latitude', data=housing)
<Axes: xlabel='longitude', ylabel='latitude'>
# Usamos la librerĂa 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California (DataFrame 'housing')
# Usamos el parĂ¡metro de opacidad 'alpha' de 0.1. Esto significa que los puntos tendrĂ¡n una opacidad del 10%. Esto es Ăºtil cuando tenemos muchos puntos y queremos visualizar la densidad
# Usamos el parĂ¡metro 'hue' para agregar una dimensiĂ³n adicional a la trama al colorear los puntos de datos segĂºn la variable 'median_house_value'
sns.scatterplot(x='longitude', y='latitude', data=housing, alpha=0.1, hue='median_house_value')
<Axes: xlabel='longitude', ylabel='latitude'>
# Usamos la librerĂa 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California, con la intensidad del color representando la proximidad al ocĂ©ano
sns.scatterplot(x='longitude', y='latitude', data=housing, alpha=0.1, hue='ocean_proximity')
<Axes: xlabel='longitude', ylabel='latitude'>
Fase III: CorrelaciĂ³n y perfilado de datos con ydata_profiling¶
# Instala la librerĂa 'ydata_profiling' (Pandas Profiling) en el ambiente de desarrollo
#!pip install ydata_profiling
# Importa la clase 'ProfileReport' desde 'ydata_profiling'
from ydata_profiling import ProfileReport
# Utiliza Pandas Profiler para generar un informe de perfilado de datos del DataFrame 'housing'
profile = ProfileReport(housing, title='Reporte Perfilamiento de Datos', explorative=True)
profile.to_notebook_iframe()
# Opcional: Para generar un informe de perfilamiento de datos en formato HTML, utiliza el método 'to_file()' de la clase 'ProfileReport'
# profile.to_file("reporte_perfilamiento_datos.html")
Improve your data and profiling with ydata-sdk, featuring data quality scoring, redundancy detection, outlier identification, text validation, and synthetic data generation.
Summarize dataset: 0%| | 0/5 [00:00<?, ?it/s]
100%|██████████| 10/10 [00:00<00:00, 65.77it/s]
Generate report structure: 0%| | 0/1 [00:00<?, ?it/s]
Render HTML: 0%| | 0/1 [00:00<?, ?it/s]
sns.scatterplot(x='housing_median_age', y='median_house_value', data=housing)
plt.title('RelaciĂ³n entre Edad Mediana de la Vivienda y Valor Mediano de la Vivienda')
plt.xlabel('Edad Mediana de la Vivienda (en años)')
plt.ylabel('Valor Mediano de la Vivienda (en dĂ³lares)')
plt.show()